Network interface cards (NICs) are used to connect a system (i.e., a computer system) to a network. Typically, different types of NICs are used to connect a computer system to specific types of networks and protocols (e.g., Ethernet, Token Ring, etc.). The NIC typically communicates using NIC drivers (i.e., network drivers), which are software interfaces between the NIC and the operating system data link layer.
Conventionally, NIC drivers are written using the Data Link Provider Interface (DLPI) specification. The DLPI provides a set of instructions and commands that the NIC driver may use to specify functions and features offered by the NIC. The DLPI may be used, for example, to specify data being sent or instructions to set particular options between two system components. For example, typically, when a new NIC is introduced into a system, the NIC driver and the operating system (OS) communicate via DLPI. The NIC driver sends data from the NIC to the OS using DLPI capability negotiation. Conventionally, capability negotiation is used to inform the OS which features the NIC supports, describes the features, and may provide some options available to use the features (e.g., hardware checksum, zero-copy-support, etc.).
Today, NICs are incorporating new technologies at a rapid pace, and many of these advanced features and functionalities require advanced interfaces between the operating system and the NIC in order to allow the operating system to be aware of and make use of these new features.